#
# 
# @ClassName: PyTestCommand
# @Author: android 超级兵
# @CreateDate: 2021/12/8$ 14:48$
# TODO  PyTest 常用命令命令
#
class PyTestCommand:
    # TODO ========= PyTest ====================
    # 测试用例满足某个条件就结束 TODO 例如: pytest.main(['--maxfail','5']) 用例执行5次失败就退出
    PYTEST_ERROR_MAX_FAIL = "--maxfail"

    # 重试 错误用例重复执行{}次 TODO 例如: pytest.main(['-s', '--reruns=2','test_11.py'])
    PYTEST_RETRY = '--reruns={}'
    # 重试等待时间 错误用例重复执行%d次 每次等待%d秒 TODO 例如: pytest.main(['-s', '--reruns=2', '--reruns-delay=3', 'test_11.py'])
    # ⚠️: 需要配合 PYTEST_RETRY 使用
    PYTEST_RETRY_DELAY = '--reruns-delay={}'

    # 只执行slow标记的用例
    PYTEST_SLOW = "slow"
    # 需配合 PYTEST_SLOW 使用
    PYTEST_M = "-m"

    # 输出详细信息
    PYTEST_S = "-s"

    # 显示具体测试用例
    PYTEST_V = "-v"

    # 简化测试用例输出
    PYTEST_Q = "-q"

    # 执行特定的测试用例 TODO 例如: pytest.main(['-k','aaa']) 只执行包含 aaa 的测试用例
    PYTEST_K = "-k"

    # 测试用例失败就立马结束
    PYTEST_X = "-x"

    # TODO ========= allure ====================
    """
    自动化用例
        - epic 最大的模块 [1级]
        - feature 特点 [2级]
        - story 场景   [3级]
        - title 用户标题
        - testcase 用例 url
        - issue bug地址
        - step 用例步骤
        - severity() 用例等级
    """

    # allure 生成路径
    PYTEST_ALLURE_JSON_DATA = "./allure_json_data"

    # 开启allure
    PYTEST_ALLURE_START = "--alluredir"

    # 清空之前jsonData 数据
    PYTEST_ALLURE_CLEAR = "--clean-alluredir"

    # 添加上的 测试报告会显示print(数据)
    PYTEST_ALLURE_S = "--s"

    # 只执行最大的模块 TODO 例如: pytest.main([AllureCommand.PYTEST_ALLURE_EPICS.format("我是TestAllure02")])
    PYTEST_ALLURE_EPICS = "--allure-epics={}"

    # 和 PYTEST_ALLURE_EPICS 使用一样
    PYTEST_ALLURE_FEATURE = "--allure-features={}"

    # 和 PYTEST_ALLURE_EPICS 使用一样
    PYTEST_ALLURE_STORY = "--allure-stories={}"

    # 不加载print() 到测试报告
    PYTEST_ALLURE_NO_CAPTURE = "--allure-no-capture"

    # TODO 用例等级
    # blocker 阻塞缺陷 【功能为实现】
    # critical 严重阻塞   【功能有缺陷】
    # normal 一般缺陷 【格式错误】
    # minor 次要缺陷  【界面与ui不符】
    # trivial 轻微缺陷    【不规范】
    # TODO 只执行某个级别时候使用
    #  例如: pytest.main(['--allure-severities','blocker,critical']) // 只执行blocker和critical等级的用例
    PYTEST_ALLURE_SEVERITIES = "--allure-severities"

    # blocker 阻塞缺陷 【功能为实现】
    PYTEST_ALLURE_ERROR_BLOCKER = "blocker"

    # critical 严重阻塞   【功能有缺陷】
    PYTEST_ALLURE_ERROR_CRITICAL = "critical"

    # normal 一般缺陷 【格式错误】
    PYTEST_ALLURE_ERROR_NORMAL = "normal"

    # minor 次要缺陷  【界面与ui不符】
    PYTEST_ALLURE_ERROR_MINOR = "minor"

    # trivial 轻微缺陷    【不规范】
    PYTEST_ALLURE_ERROR_TRIVIAL = "trivial"

    #  TODO ======== os ========

    # 控制台 生成allure
    OS_ALLURE_GENERATE_CLEAR = "allure generate {} -o ./report/ --clean".format(PYTEST_ALLURE_JSON_DATA)

    OS_ALLURE_GENERATE = "allure generate {} -o ./report/".format(PYTEST_ALLURE_JSON_DATA)

    # OS_ALLURE_COPY_ENV_CONFIG_IN = "copy environment.properties allure_json_data\\environment.properties"

    # server 服务
    # OS_ALLURE_SERVE = "allure serve target/allure-results"
    OS_ALLURE_SERVE = "allure serve {}".format(PYTEST_ALLURE_JSON_DATA)

    # TODO ========= 装饰器 ==========

    # TODO 例如:@allure.title("登陆:{}".format(AllureCommand.DECORATOR_TITLE_TEST_INPUT))
    DECORATOR_TITLE_TEST_INPUT = "{test_input}"
